package q856_scoreOfParentheses;

public class Solution_4 {
    /*
    相对巧妙解法
    既然"()"的值为1，我们就直接利用replace函数把"()"替换成"1"，
    那我们就得到了 "(())"变为"(1)"； "()()"变为"11"；"(()(()))"变为"(1(1))"
    分析一下替换后的内容，"(1(1))" 直观上是(1+1×2)×2=1×2+1×2×2 (加法分配律)
    如此一来，直接看当前位置的1的前面有多少个"("就可以知道×几个2了，
    如第一个"1"前有一个，第二个"1"前有两个。同理呢，遇见")"
    我们就要除以2了:(1)(1)=1×2+1×2 第二个"1"前有两个"("和一个")"，
    会抵消一个，就剩一个"("，所以×2。
     */
    public int scoreOfParentheses(String s) {
        s = s.replace("()", "*");
        int temp = 1, ans = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '*') ans += temp;
            else if (s.charAt(i) == '(') temp <<= 1;
            else if (s.charAt(i) == ')') temp >>= 1;
        }
        return ans;
    }
}
